/**
 * @description: 选择手机图片
 * @param {type} album	从相册选图	
 * @param {type} camera	使用相机	
 * @return {type} 
 * @author: hch
 */
export function chooseImage(){
  return new Promise((resolve,reject)=>{
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success (res) {
        // // tempFilePath可以作为img标签的src属性显示图片
        const tempFilePaths = res.tempFilePaths[0]
        resolve(tempFilePaths)
      }
    })
  })
}
/**
 * @description: 在新页面中全屏预览图片。预览的过程中用户可以进行保存图片、发送给朋友等操作。
 * @param {type} current	前显示图片的http链接	
 * @param {type} urls	需要预览的图片http链接列表	
 * @return {type} 
 * @author: hch
 */
export function chooseImg(current,urls){
  wx.previewImage({
    current: current, // 当前显示图片的http链接
    urls: urls // 需要预览的图片http链接列表
  })
}
/**
* @description: 绘制正方形（可以定义圆角），并且有图片地址的话填充图片
* @param {CanvasContext} ctx canvas上下文
* @param {number} x 圆角矩形选区的左上角 x坐标
* @param {number} y 圆角矩形选区的左上角 y坐标
* @param {number} w 圆角矩形选区的宽度
* @param {number} h 圆角矩形选区的高度
* @param {number} r 圆角的半径
* @param {String} url 图片的url地址
*/
export function drawSquarePic(ctx, x, y, w, h, r, url,color='#fff') {
  ctx.save()
  ctx.beginPath()
  // 绘制左上角圆弧
  ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)
  // 绘制border-top
  // 画一条线 x终点、y终点
  ctx.lineTo(x + w - r, y)
  // 绘制右上角圆弧
  ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2)
  // 绘制border-right
  ctx.lineTo(x + w, y + h - r)
  // 绘制右下角圆弧
  ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5)
  // 绘制左下角圆弧
  ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI)
  // 绘制border-left
  ctx.lineTo(x, y + r)
  // 填充颜色(需要可以自行修改)
  ctx.setFillStyle(color)
  ctx.fill()
  // 剪切，剪切之后的绘画绘制剪切区域内进行，需要save与restore 这个很重要 不然没办法保存
  ctx.clip()
  
  // 绘制图片
  return new Promise((resolve, reject) => {
    if (url) {
      wx.getImageInfo({
        src: url,
        success(res) {
          ctx.drawImage(res.path, x, y, w, h)
          ctx.restore()//恢复之前被切割的canvas，否则切割之外的就没办法用
          ctx.draw(true)
          resolve()
        },
        fail(res) {
          console.log("fail -> res", res)
          uni.showToast({
            title: "图片下载异常",
            duration: 2000,
            icon: "none"
          })
        }
      })
    }else{
      ctx.draw(true)
      resolve()
    }
  })
}

/**
 * @description: 获取设备信息
 * @param {type} 
 * @return {type} 
 * @author: hch
 */
export function getSystem() {
  let system = wx.getSystemInfoSync()
  let scale = system.windowWidth / 375 //按照苹果留 375*667比例 其他型号手机等比例缩放 显示
  return { w: system.windowWidth, h: system.windowHeight, scale: scale }
}

/**
 * @description: 绘制文本时文本的总体高度
 * @param {Object} ctx canvas上下文
 * @param {String} text 需要输入的文本
 * @param {Number} x X轴起始位置
 * @param {Number} y Y轴起始位置
 * @param {Number} maxWidth 单行最大宽度
 * @param {Number} fontSize 字体大小
 * @param {String} color 字体颜色
 * @param {String} textAlign 字体对齐方式
 */
export function drawTextReturnH(ctx, text, x, y, maxWidth,fontSize,color,textAlign,fontWeight) {
  console.log("drawTextReturnH -> maxWidth", maxWidth)
  ctx.setTextBaseline('top')
  let arrText = text.split('');
  let line = '';
  if(textAlign){
    ctx.setTextAlign(textAlign);//设置文本的水平对齐方式  ctx.setTextAlign这个可以兼容百度小程序 ，注意：ctx.textAlign百度小程序有问题
    switch (textAlign) {
      case 'center':
        x= x+maxWidth/2
        break;

      case 'right':
        x= x+maxWidth
        break;
    
      default:// 左对齐
        x= x
        break;
      }
    }
  let lineHeight = ''
  for (let n = 0; n < arrText.length; n++) {
    let testLine = line + arrText[n];
    ctx.font = fontWeight +' ' + fontSize+'px sans-serif' //设置字体大小，注意：百度小程序 用ctx.setFontSize设置字体大小后，计算字体宽度会无效
    ctx.setFillStyle(color) //设置字体颜色  
    let metrics = ctx.measureText(testLine);//measureText() 方法返回包含一个对象，该对象包含以像素计的指定字体宽度。
    let testWidth = metrics.width;
    if(lineHeight===''){
      lineHeight = testWidth
    }
    if (testWidth > maxWidth && n > 0) {
      ctx.fillText(line, x, y);
      line = arrText[n];
      console.log("drawTextReturnH -> y", y)
      console.log("drawTextReturnH -> lineHeight", lineHeight)
      y += lineHeight;
    } else {
      line = testLine;
    }
  }
  ctx.fillText(line, x, y);
  ctx.draw(true)//本次绘制是否接着上一次绘制。即 reserve 参数为 false，则在本次调用绘制之前 native 层会先清空画布再继续绘制；若 reserve 参数为 true，则保留当前画布上的内容，本次调用 drawCanvas 绘制的内容覆盖在上面，默认 false。
  return y
}